package dawn.jxufe.community.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import javax.annotation.Resource;

/**
 * @author dawn21
 * @version 1.0
 * @date 2022/8/4 15:20
 * @component
 */
@Configuration
public class RedisConfig {

    //@Resource
    //private RedisConnectionFactory factory;

    @Bean // spring容器中bean的名字为RedisTemplate，方法返回的是一个RedisTemplate<String, Object>。
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        // 为了redisTemplate访问数据库，需要建立连接，则需要连接工厂。将连接工厂注入给redisTemplate，才可访问数据库。
        RedisTemplate<String, Object> template = new RedisTemplate<>(); // 实例化一个模板
        template.setConnectionFactory(factory); // 将工厂给模板
        // 主要设置序列化的方式。
        // 我们得到java类型的数据，最终是要存到数据库中，所以需要指定一种序列化方式(数据转化方式)。

        // 设置key的序列化方式
        // 设置普通value序列化方式。
        template.setKeySerializer(RedisSerializer.string());
        template.setValueSerializer(RedisSerializer.json());

        // 设置hash的key的序列化方式
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置hash的value的序列化方式
        template.setHashValueSerializer(RedisSerializer.json());
        template.afterPropertiesSet();
        return template;
    }
}
